/////////////////////////////////////////////////
// Book of Angels
// (c) Copyright 2013 Edward Principe
// All Rights Reserved
////////////////////////////////////////////////
#ifndef EX2_H
#define EX2_H

#include <Windows.h>
#include <tchar.h>
#include <string>

using namespace std;

////////////////////////////////////////////////
// Ex: Basic exception class
//////////////////////////////////////////////////
class Ex
{
public: // Construction
	Ex() {}
#ifdef _UNICODE
	Ex(const wstring& msg)
#else
	Ex(const string& msg)
#endif
	{
		_msg = msg;
	}

	Ex(const TCHAR *msg) : _msg(msg) {}

	Ex(const Ex& rhs)
	{
		Copy(rhs);
	}

public: // Methods
	void Delete()
	{
		delete this;
	}

public: // Accessor methods
#ifdef _UNICODE
	wstring GetMsg()
#else
	string GetMsg()
#endif
	{
		return _msg;
	}

public: // Operators
	Ex& operator = (const Ex& rhs)
	{
		Copy(rhs);
		return *this;
	}

#ifdef _UNICODE
	Ex& operator = (wstring& msg)
#else
	Ex& operator = (string& msg)
#endif
	{
		if(&_msg == &msg)
			return *this;

		_msg = msg;

		return *this;
	}

	Ex& operator = (const TCHAR *msg)
	{
		_msg = msg;
		return *this;
	}

protected: // Methods
	void Copy(const Ex& rhs)
	{
		if(this == &rhs)
			return;

		_msg = rhs._msg;
	}


protected: // Attributes
#ifdef _UNICODE
	wstring _msg; // The error message
#else
	string _msg; // The error message
#endif
};
#endif
